# 定义一函数,可求任意个数字和
def sum(*nums):
    # 变量保存结果
    result = 0
    # 遍历元组参数累加
    for num in nums:
        result += num
    print(f'累加和:{result}')


sum(1, 2, 3)


# *value会接受所有的位置实参，并且会将这些实参统一保存到一个元组中装包
def function1(*value):
    print(f'value={value},type(value)={type(value)}')


value, value1, *value2 = (1, 2, 3, 4, 5)
function1(value)


# 带星号的参数,可以和其他参数配合使用. 第一个参数给a,第二个参数给b,剩下的都保存到c的元组中
def function2(a, b, *c):
    print('a =', a)
    print('b =', b)
    print('c =', c)


function2(value, value1, value2)


# 可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递第一个参数给a,剩下的位置参数给b的元组,c必须使用关键字参数
def function3(a, *b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)


# 所有的位置参数都给a,b和c必须使用关键字参数
def function4(*a, b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)


# 如果在形参的开头直接写一个*,则要求我们的所有的参数必须以关键字参数的形式传递
def function5(*, a, b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)


# fn2(a=3,b=4,c=5)

# *形参只能接收位置参数,而不能接收关键字参数
def function6(*a):
    print('a =', a)


# **形参可以接收其他的关键字参数,它会将这些参数统一保存到一个字典中. 字典的key就是参数的名字,字典的value就是参数的值. **形参只能有一个,并且必须写在所有参数的最后
def function7(b, c, **a):
    print('a =', a, type(a))
    print('b =', b)
    print('c =', c)


# function7(b=1,d=2,c=3,e=10,f=20)

# 参数的解包（拆包）
def function8(a, b, c):
    print('a =', a)
    print('b =', b)
    print('c =', c)

# 创建一个元组
# t = (10, 20, 30)

# 传递实参时，也可以在序列类型的参数前添加星号，这样他会自动将序列中的元素依次作为参数传递
# 这里要求序列中元素的个数必须和形参的个数的一致
# function8(*t)

# 创建一个字典
# d = {'a': 100, 'b': 200, 'c': 300}
# # 通过 **来对一个字典进行
# function8(**d)
